package org.jim.core.helper;

import org.jim.core.packets.pub.pojo.JimChatBody;
import org.jim.core.packets.cs.session.vo.JimCsMessageResp;
import org.jim.core.packets.cs.user.vo.UserMessageData;
import org.tio.utils.page.Page;

/**
 * @FileName:
 * @Description:
 * @Author linjie
 * @Date 2020/7/294:02 PM
 * @Version 4.0.0
 */
public interface IChatHelper {

    /**
     * 消息持久化db写入
     *
     * @param chatBody 消息记录
     */
    void writeDbMessage(JimChatBody chatBody);


    /**
     * cache消息写入
     *
     * @param timelineTable 持久化表
     * @param timelineId    持久化ID
     * @param chatBody      消息记录
     */
    void writeCacheMessage(String timelineTable, String timelineId, JimChatBody chatBody);


    /**
     * 获取与指定用户离线消息;
     *
     * @param userId     用户ID
     * @param fromUserId 目标用户ID
     * @return
     */
    UserMessageData getFriendsOfflineMessage(String userId, String fromUserId);

    /**
     * 获取与所有用户离线消息;
     *
     * @param userId 用户ID
     * @return
     */
    UserMessageData getFriendsOfflineMessage(String userId);

    /**
     * 获取用户指定群组离线消息;
     *
     * @param userId  用户ID
     * @param groupId 群组ID
     * @return
     */
    UserMessageData getGroupOfflineMessage(String userId, String groupId);

    /**
     * 获取与指定用户历史消息;
     *
     * @param userId     用户ID
     * @param fromUserId 目标用户ID
     * @param beginTime  消息区间开始时间
     * @param endTime    消息区间结束时间
     * @param offset     分页偏移量
     * @param count      数量
     * @return
     */
    UserMessageData getFriendHistoryMessage(String userId, String fromUserId, Double beginTime, Double endTime, Integer offset, Integer count);

    /**
     * 客户 获取与租户历史消息;
     *
     * @param userId    用户ID
     * @param csUserId  客服ID
     * @param beginTime 消息区间开始时间
     * @param endTime   消息区间结束时间
     * @param offset    分页偏移量
     * @param count     数量
     * @return
     */
    Page<JimCsMessageResp> getCsHistoryMessage(String userId, String csUserId, Double beginTime, Double endTime, Integer offset, Integer count);

    /**
     * 获取与指定群组历史消息;
     *
     * @param userId    用户ID
     * @param groupId   群组ID
     * @param beginTime 消息区间开始时间
     * @param endTime   消息区间结束时间
     * @param offset    分页偏移量
     * @param count     数量
     * @return
     */
    UserMessageData getGroupHistoryMessage(String userId, String groupId, Double beginTime, Double endTime, Integer offset, Integer count);

}
